package com.molichuxing.services.infrastructure.service;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.infrastructure.dto.request.create.UserCreateDto;
import com.molichuxing.services.infrastructure.dto.response.UserDto;

/**
 * 
 * @author liyg
 * 用户服务
 * 2019-08-06
 * 
 */
public interface UserService extends RootService{

	/**
	 * 获取用户信息
	 *
	 * @param id
	 *            用户id
	 * @return
	 */
	UserDto getUser(Integer id);
	
	/**
	 * 获取用户信息
	 *
	 * @param openId
	 *            微信公众号 openId
	 * @return
	 */
	UserDto getUser(String openId);

	/**
	 * 获取用户信息
	 *
	 * @param name
	 *            用户名（精确查询） 非必填 (必须有一项必填)
	 * @param realName
	 *            用户真实姓名（精确查询） 非必填
	 * @param phone
	 *            用户手机号（精确查询） 非必填
	 *
	 * @return
	 */
	UserDto getUser(String name,String realName,String phone);

	/**
	 * 获取用户信息
	 *
	 * @param phone
	 *           用户手机号
	 * @return
	 */
	UserDto getUserByPhone(String phone);

	/**
	 * 获取用户信息
	 *
	 * @param name
	 *           用户名
	 * @return
	 */
	UserDto getUserByName(String name);

	/**
	 * 获取用户信息
	 *
	 * @param realName
	 *           用户真实姓名
	 * @return
	 */
	UserDto getUserByRealName(String realName);

	/**
	 * 获取用户列表
	 *
	 * @param name
	 *            用户名（模糊查询）非必填
	 * @param realName
	 *            用户姓名（模糊查询）非必填
	 * @param phone
	 *            用户手机号（精确查询） 非必填
	 * @return
	 */
	List<UserDto> getUserList(String name,String realName,String phone);
	
	/**
	 * 获取用户基本信息
	 * 
	 * @param ids
	 * @return
	 */
	Map<Integer,UserDto> getUsers(List<Integer> ids);

	/**
	 * 获取用户列表
	 *
	 * @param map
	 *            参数
	 * key:name String 用户名 非必填
	 * key:realName String 用户姓名 非必填
	 * key:phone String 用户手机 非必填
	 * key:source Integer 用户来源 非必填
	 * key:startTime String 注册开始时间 非必填
	 * key:endTime String 注册结束时间 非必填
	 * pageNum Integer 当前页
	 * pageSize Integer 每页显示条数
	 *@return
	 */
	Paged<UserDto> getUserList(Map<String, Object> map);
	
	/**
	 * 修改用户是否拉入黑名单状态
	 * @param id
	 * @param isBlack true：已拉黑 false：未拉黑
	 * @return
	 */
	Boolean modifyIsBlack(Integer id,Boolean isBlack);
	
	/**
	 * 保存用户信息
	 * @param createDto
	 * @return
	 */
	Integer createUser(UserCreateDto createDto);
	
	/**
	 * 修改用户个人信息
	 * @param realName
	 * @param email
	 * @param address
	 * @param userId
	 * @return
	 */
	Boolean modifyUser(String realName,String email,String address,Integer userId);
	
	/**
	 * 修改用户个人信息
	 * @param realName
	 * @param userId
	 * @return
	 */
	Boolean modifyUserRealName(String realName,Integer userId);
	
	/**
	 * 修改用户微信openId
	 * @param openId
	 * @param userId
	 * @return
	 */
	Boolean modifyUserOpenId(String openId,Integer userId);

	/**
	 * 修改用户微信为空
	 * @param openId
	 * @return
	 */
	Boolean modifyUserOpenId(String openId);


	/**
	 * 修改用户地址
	 * @param address
	 * @param userId
	 * @return
	 */
	Boolean modifyUserAddress(String address, Integer userId);

	/**
	 *  修改用户地址+邮箱
	 * @param address
	 * @param email
	 * @param userId
	 * @return
	 */
	Boolean modifyUserEmail(String address, String email, Integer userId);
	
	/**
	 *  修改用户是否下过单  true：下过单  false：未下过单
	 * @param isOrder
	 * @param userId
	 * @return
	 */
	Boolean modifyUserIsOrder(Boolean isOrder, Integer userId);

}
